package com.laker.autotest.page.csdn;


import com.laker.autotest.core.BasePage;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;

/**
 * <p>
 * https://playwright.dev/java/docs/pom
 * 页面对象模型，目的是为了代码维护方便。
 * 以搜索功能为例，搜索页面需要存放元素定位和控件操作行为。
 * csdn 首页
 * 在 Playwright 中，"对象页面模式"（Object Page Pattern）是一种设计模式，它用于将页面的各个功能和行为封装到单独的对象中，
 * 使代码更模块化、可维护性更强。这种模式通常用于自动化测试框架，其中每个页面或组件都由一个独立的类来表示，提供访问和操作页面元素的方法。
 * </p>
 */
public class CsdnHomePage extends BasePage {
    public static final String URL = "https://www.csdn.net";
    private final Locator searchTermInput;
    private final Locator searchBtn;
    private final Locator passportbox;


    public CsdnHomePage(Page page) {
        super(page);
        // <input id="toolbar-search-input"
        this.searchTermInput = getComponentById("toolbar-search-input");
        // <button id="toolbar-search-button"><i></i><span>搜索</span></button>
        this.searchBtn = getComponentById("toolbar-search-button");
        this.passportbox = page.locator("#passportbox").getByRole(AriaRole.IMG);
    }

    @Override
    protected String pageUrl() {
        return URL;
    }

    /**
     * 在首页搜索或弹出个新的页面，即返回的是SearchPage
     *
     * @param text
     * @return
     */
    public CsdnSearchPage search(String text) {
        searchTermInput.fill(text);
        searchBtn.click();
        passportbox.click();
        return new CsdnSearchPage(page.waitForPopup(searchBtn::click));
    }

}